3.6 拥塞控制原理
拥塞产生的原因及代价
当端系统以超出网络核心承载极限的速度向网络中注入数据就会导致拥塞。我们将采用与研究 可靠数据传输的原理 时类似的方式从理想化模型向现实情况过渡一条一条研究拥塞产生的原因及对应的代价。
Step 1. 两个发送方,链路带宽为 ,路由器缓存无限
由于路由器缓存无限大,必然不会发生丢包。则发送方发送数据的速率

为什么随着 接近 时传输时延会呈现如图所示的变化?
见 1.6 分组交换中的延时、丢包与吞吐量 中关于流量强度的描述。
由此可见:当发生网络拥塞时,分组会经历巨大的排队时延。
Step 2. 两个发送方,链路带宽为 ,路由器缓存有限
由于路由器缓存有限,如果进入路由器的分组过多导致缓存溢出就会导致丢包。丢包会触发发送方重发报文。我们记

由此可见,当发生网络拥塞时,发送方会因为重传(无论是因为分组确实丢失而必须进行的重传还是因大时延触发超时机制导致的不必要重传)导致链路转发重复的分组。
Step 3. 多个发送方,多台路由器,多跳路径

当上面图片所示的四台主机全部以过高的速率向网络中注入数据时,最终会导致整个网络陷入这样的死锁状况,导致整个网络没有任何分组正常到达接收方:
- 以红色链路为例,当发送速率足够大时,来自这条链路的分组会立刻注满与其直接相连的路由器,导致来自蓝色链路的路由器因为其流量已经经过一跳的过滤占比远小于红色链路的流量,最终无法通过该路由器继续传递分组而是几乎全部在本路由器处被丢弃。
- 同样的,当红色链路的流量到达下一台路由器时,其会遭遇相同的困境:来自绿色链路的流量占满了该路由器,导致红色链路上的分组几乎全部被丢弃。
- 因此,对于图中的所有链路,没有任何数据成功到达接收方。
下面的图片描述了各主机向网络中注入数据的速率

这表明,网络拥塞会导致某个分组沿着某条路径却最终被某台路由器丢弃时,每个上游路由器用于转发该分组使用的链路带宽最终被浪费掉了。
总结
网络拥塞会带来如下四条代价:
- 分组会经历巨大的排队时延。
- 发送方重传分组导致链路传输数据效率下降。
- 某个分组被路由器丢弃导致上游路由器传输数据效率下降。
拥塞控制方法
常见的拥塞控制方法可以根据 网络层 是否为运输层拥塞控制提供了显式帮助分为两类:
- 网络辅助的拥塞控制,网络层会提供指示网络中拥塞状态的辅助信息。例如在 ATM 网络中就存在 ABR 拥塞控制机制:ATM 网络中数据以 信元 为单位进行发送,分为数据信元与资源管理(RM)信元两种。发送方会在数据信元中间隔插入资源管理信元。而 RM 信元中的某些标志 bit 会在传输途中被交换机与路由器根据网络情况置位。例如 NI bit 指示发送方不再增加发送速率;CI bit 指示网络中已经发生了拥塞;ER 字段指示该链路能够保证的最大传输速率等等。接收方接收到这些 RM 信元后会原封不动回送给发送方;发送方根据接收到的 RM 信元调整发送数据的速率。
- 端到端拥塞控制:网络层不会为传输层拥塞控制提供显式支持,传输层实体必须通过对网络行为的观察来推断网络中是否发生了拥塞。经典的 TCP/IP 使用的便是端到端的拥塞控制,具体原理会在 3.7 TCP 的拥塞控制 详细讲述。不过 RFC 3168 中对 TCP/IP 的拓展方案已经逐渐普及,其实现了网络辅助的拥塞控制机制。所有主流操作系统都支持这一机制但并未默认启用;但网络核心部分的设备仅仅部分支持了这一机制。